a->nr_extents-1) )
return;
- if ( (a->extent_order != 0) &&
- !multipage_allocation_permitted(current->domain) )
+ if ( !multipage_allocation_permitted(current->domain, a->extent_order) )
return;
for ( i = a->nr_done; i < a->nr_extents; i++ )
a->nr_extents-1) )
return;
- if ( (a->extent_order != 0) &&
- !multipage_allocation_permitted(current->domain) )
+ if ( !multipage_allocation_permitted(current->domain, a->extent_order) )
return;
for ( i = a->nr_done; i < a->nr_extents; i++ )
}
/* Only privileged guests can allocate multi-page contiguous extents. */
- if ( ((exch.in.extent_order != 0) || (exch.out.extent_order != 0)) &&
- !multipage_allocation_permitted(current->domain) )
+ if ( !multipage_allocation_permitted(current->domain,
+ exch.in.extent_order) ||
+ !multipage_allocation_permitted(current->domain,
+ exch.out.extent_order) )
{
rc = -EPERM;
goto fail_early;
#define ioports_access_permitted(d, s, e) \
rangeset_contains_range((d)->arch.ioport_caps, s, e)
+#define multipage_allocation_permitted(d, order) \
+ (((order) == 0) || \
+ !rangeset_is_empty((d)->iomem_caps) || \
+ !rangeset_is_empty((d)->arch.ioport_caps))
+
#endif /* __IA64_IOCAP_H__ */
(!rangeset_is_empty((d)->iomem_caps) || \
!rangeset_is_empty((d)->arch.ioport_caps))
+#define multipage_allocation_permitted(d, order) \
+ (((order) <= 9) || /* allow 2MB superpages */ \
+ !rangeset_is_empty((d)->iomem_caps) || \
+ !rangeset_is_empty((d)->arch.ioport_caps))
+
#endif /* __X86_IOCAP_H__ */
#define irq_access_permitted(d, i) \
rangeset_contains_singleton((d)->irq_caps, i)
-#define multipage_allocation_permitted(d) \
- (!rangeset_is_empty((d)->iomem_caps) || \
- !rangeset_is_empty((d)->arch.ioport_caps))
-
#endif /* __XEN_IOCAP_H__ */